const express = require('express');
const router = express.Router();
const CooperationApplication = require('../models/CooperationApplication');
const { authenticateToken } = require('../middleware/auth');

/**
 * 创建合作申请（公开接口，小程序端使用）
 */
router.post('/submit', async (req, res) => {
  try {
    const { name, phone, intention, description } = req.body;

    // 验证必填字段
    if (!name || !phone || !intention) {
      return res.error('请填写完整的申请信息', 400);
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      return res.error('请输入正确的手机号', 400);
    }

    // 验证合作意向
    const validIntentions = ['区域代理', '加盟合作', '分销合作', '其他合作'];
    if (!validIntentions.includes(intention)) {
      return res.error('请选择有效的合作意向', 400);
    }

    const application = await CooperationApplication.create({
      name: name.trim(),
      phone: phone.trim(),
      intention,
      description: description ? description.trim() : ''
    });

    res.success(application, '申请提交成功，我们会尽快与您联系');
  } catch (err) {
    console.error('创建合作申请失败:', err);
    res.error('申请提交失败，请稍后重试', 500);
  }
});

/**
 * 获取合作申请列表（管理端）
 */
router.get('/', authenticateToken, async (req, res) => {
  try {
    const {
      page = 1,
      pageSize = 10,
      search = '',
      status,
      intention,
      start_date,
      end_date,
      sort = 'created_at',
      order = 'DESC'
    } = req.query;

    const options = {
      page: parseInt(page),
      pageSize: parseInt(pageSize),
      search,
      status,
      intention,
      start_date,
      end_date,
      sort,
      order
    };

    const result = await CooperationApplication.getList(options);
    res.success(result);
  } catch (err) {
    console.error('获取合作申请列表失败:', err);
    res.error('获取申请列表失败', 500);
  }
});

/**
 * 获取合作申请统计（管理端）
 */
router.get('/stats/summary', authenticateToken, async (req, res) => {
  try {
    const stats = await CooperationApplication.getStats();
    res.success(stats);
  } catch (err) {
    console.error('获取合作申请统计失败:', err);
    res.error('获取统计数据失败', 500);
  }
});

/**
 * 获取合作申请详情（管理端）
 */
router.get('/:id', authenticateToken, async (req, res) => {
  try {
    const { id } = req.params;
    const application = await CooperationApplication.findById(id);
    
    if (!application) {
      return res.error('申请记录不存在', 404);
    }

    res.success(application);
  } catch (err) {
    console.error('获取合作申请详情失败:', err);
    res.error('获取申请详情失败', 500);
  }
});

/**
 * 更新合作申请状态（管理端）
 */
router.put('/:id/status', authenticateToken, async (req, res) => {
  try {
    const { id } = req.params;
    const { status, remark = '' } = req.body;

    // 验证状态值
    const validStatuses = ['pending', 'contacted', 'accepted', 'rejected'];
    if (!validStatuses.includes(status)) {
      return res.error('无效的状态值', 400);
    }

    const application = await CooperationApplication.updateStatus(id, status, remark);
    
    if (!application) {
      return res.error('申请记录不存在', 404);
    }

    res.success(application, '状态更新成功');
  } catch (err) {
    console.error('更新合作申请状态失败:', err);
    res.error('状态更新失败', 500);
  }
});

/**
 * 删除合作申请（管理端）
 */
router.delete('/:id', authenticateToken, async (req, res) => {
  try {
    const { id } = req.params;
    const deleted = await CooperationApplication.delete(id);
    
    if (!deleted) {
      return res.error('申请记录不存在', 404);
    }

    res.success(null, '删除成功');
  } catch (err) {
    console.error('删除合作申请失败:', err);
    res.error('删除失败', 500);
  }
});

module.exports = router;